package Vista;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.util.List;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;

import remote.BusinessDelegate;
import Controller.Controller;
import Interfaz.RutaDTO;
import Interfaz.SucursalDTO;
import Negocio.Sucursal;
import Servicios.ServiceException;
import Util.Contexto;

@SuppressWarnings("unused")
public class AltaRuta extends JPanel{
	
	private static final long serialVersionUID = 1L;
	private JLabel labelnombreSucursalOrigen;
	private JButton buttonCancelar;
	private JButton buttonCrear;
	private JComboBox textnombreSucursalOrigen;
	private static AltaRuta instancia;
	private JLabel lblnombreSucursalDestino;
	private JComboBox textFieldnombreSucursalDestino;
	private JLabel lbldistanciaKm;
	private JTextField textFieldistanciaKm;
	private JLabel lblduracionViajeHs;
	private JTextField textFieldduracionViajeHs;
	private JLabel lblplazoEntregaGarantizadaHs;
	private JTextField textFieldplazoEntregaGarantizadaHs;
	private String msg;
	
	@SuppressWarnings("rawtypes")
	
	
	public static AltaRuta getInstancia()
	{
		if (instancia == null)
			instancia = new AltaRuta();
		return instancia;
	}

	
	public AltaRuta() {
		super();
		initGUI();
	}

	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	private void initGUI() {
		try {

			this.setLayout(null);
			List<SucursalDTO> sucursales = BusinessDelegate.getInstance().getAllSucursales();
			String[] nomSucursales = new String[sucursales.size()];
			int i = 0;
			for (SucursalDTO sucursal : sucursales) {
				nomSucursales[i] = sucursal.getNombre();
				i++;
			}
			
			{
				labelnombreSucursalOrigen = new JLabel();
				this.add(labelnombreSucursalOrigen);
				labelnombreSucursalOrigen.setText("Sucursal origen:");
				labelnombreSucursalOrigen.setBounds(90, 20, 141, 25);
				labelnombreSucursalOrigen.setSize(180,26);
			}
			
			
			{
				textnombreSucursalOrigen = new JComboBox(nomSucursales);
				this.add(textnombreSucursalOrigen);
				textnombreSucursalOrigen.setBounds(258, 20, 119, 21);
				textnombreSucursalOrigen.setSize(180, 26);
			}
			{
				buttonCrear = new JButton();
				this.add(buttonCrear);
				buttonCrear.setText("Crear ");
				buttonCrear.setBounds(90, 230, 125, 32);
				buttonCrear.setSize(150, 40);
				buttonCrear.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						
				
						if(guardarRuta()) {
							notificarMensaje("La ruta fue creada con exito");
							clearFields();
							SwingUtilities.windowForComponent(AltaRuta.this).dispose();
						} else {
							notificarError(msg);
						}
						
					}
				});
			}
			{
				buttonCancelar = new JButton();
				this.add(buttonCancelar);
				buttonCancelar.setText("Cancelar");
				buttonCancelar.addActionListener(new ActionListener(){

					@Override
					public void actionPerformed(ActionEvent arg0) {
						clearFields();
						SwingUtilities.windowForComponent(AltaRuta.this).dispose();
						
					}
					
				});
				buttonCancelar.setBounds(302, 230, 125, 30);
				buttonCancelar.setSize(150, 40);
				{
					lblnombreSucursalDestino = new JLabel();
					lblnombreSucursalDestino.setText("Sucursal destino:");
					lblnombreSucursalDestino.setBounds(90, 60, 110, 25);
					lblnombreSucursalDestino.setSize(180,26);
					this.add(lblnombreSucursalDestino);
				}
				{
					textFieldnombreSucursalDestino = new JComboBox(nomSucursales);
					textFieldnombreSucursalDestino.setBounds(258, 60, 119, 26);
					textFieldnombreSucursalDestino.setSize(180, 26);
					this.add(textFieldnombreSucursalDestino);
				}
				{
					lbldistanciaKm = new JLabel();
					lbldistanciaKm.setText("Distancia (Km):");
					lbldistanciaKm.setBounds(90, 100, 110, 25);
					lbldistanciaKm.setSize(180,26);
					this.add(lbldistanciaKm);
				}
				{
					textFieldistanciaKm = new JTextField();
					textFieldistanciaKm.setBounds(258, 100, 119, 26);
					textFieldistanciaKm.setSize(180, 26);
					this.add(textFieldistanciaKm);
				}
				{
					lblduracionViajeHs = new JLabel();
					lblduracionViajeHs.setText("Duracion Viaje (Hs):");
					lblduracionViajeHs.setBounds(90, 140, 110, 25);
					lblduracionViajeHs.setSize(180,26);
					this.add(lblduracionViajeHs);
				}
				{
					textFieldduracionViajeHs = new JTextField();
					textFieldduracionViajeHs.setBounds(258, 140, 119, 26);
					textFieldduracionViajeHs.setSize(180, 26);
					this.add(textFieldduracionViajeHs);
				}
				{
					lblplazoEntregaGarantizadaHs = new JLabel();
					lblplazoEntregaGarantizadaHs.setText("Plazo entrega Garant. (Hs):");
					lblplazoEntregaGarantizadaHs.setBounds(90, 180, 110, 25);
					lblplazoEntregaGarantizadaHs.setSize(180,26);
					this.add(lblplazoEntregaGarantizadaHs);
				}
				{
					textFieldplazoEntregaGarantizadaHs = new JTextField();
					textFieldplazoEntregaGarantizadaHs.setBounds(258, 180, 119, 26);
					textFieldplazoEntregaGarantizadaHs.setSize(180, 26);
					this.add(textFieldplazoEntregaGarantizadaHs);
				}
				
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	private void clearFields() {
		
		textFieldistanciaKm.setText("");
		textFieldduracionViajeHs.setText("");
		textFieldplazoEntregaGarantizadaHs.setText("");
		
	}
	
	private boolean guardarRuta() {
		boolean result = true;
		
		String nombreOrigen = textnombreSucursalOrigen.getSelectedItem().toString();
		String nombreDestino = textFieldnombreSucursalDestino.getSelectedItem().toString();
		Float distanciaKm = Float.valueOf(textFieldistanciaKm.getText());
		Float duracionViajeHs = Float.valueOf(textFieldduracionViajeHs.getText());
		Float plazoEntregaGarantizada = Float.valueOf(textFieldplazoEntregaGarantizadaHs.getText());
		
		
		RutaDTO rutaDTO = new RutaDTO(nombreOrigen, nombreDestino, distanciaKm, duracionViajeHs,plazoEntregaGarantizada);
		

		try {
			BusinessDelegate.getInstance().altaRuta(rutaDTO);
		} catch (RemoteException e) {
			result = false;
			//e.printStackTrace();
		    msg = e.getMessage();
		} catch (ServiceException e) {
			result = false;
			//e.printStackTrace();
			msg = e.getMessage();
		}
		return result;
	}
	
	public void showPanel() {
		final JFrame mainFrame = new JFrame();
		mainFrame.setTitle("Nueva Ruta");
		mainFrame.getContentPane().add(this);
		mainFrame.setPreferredSize(new java.awt.Dimension(550, 300));
		mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		mainFrame.pack();
		mainFrame.setLocationRelativeTo(null);
		mainFrame.setVisible(true);
	}
	
	private void notificarMensaje(String mensaje) {
		Contexto.displayFeedbackMessage(AltaRuta.this, mensaje);
	}
	
	private void notificarError(String error) {
		Contexto.displayErrorMessage(AltaRuta.this,error);
	}
	
	public static void main(String[] args) {
		AltaRuta ar = new AltaRuta();ar.showPanel();
	}
			
		


}
